Block compaction of a flash memory data block is an operation through which only valid data is copied over to a new block by the discarding the invalid data. In other words, allocated objects are moved together, while empty space is left together. Block compaction may also be referred to as memory compaction or storage allocation and refers to the relocation of information blocks in memory in order to maximize the available free space in the memory. Block compaction may be an expensive operation in terms of processing and memory requirements. Inefficient memory compaction algorithms may result in additional processing cycles being required, which result in an overall slowing down of the system's write performance. For example, a baseline method for fragmented block compaction may be to proceed fragment by fragment in the source block, sense/read a corresponding control page to decipher the state of the fragment (e.g. valid or invalid) and copy them over to the destination block. This method may require multiple senses of the page and as many data transfers/toggles as there are fragments in the block.